#include <bits/stdc++.h>
using namespace std;
int T,n,m,L,V,D[1000006],V2[1000006],A[1000006],p[1000006],c[1000006],ans,vec[1000006],ans2;
void ck(int l,int r){
    // cout<<l<<' '<<r<<' '<<ans<<endl;
    int sp=0;
    if(l==0)sp=c[r];
    else sp=c[r]-c[l-1];
    if(sp>0)ans++,vec[l]=min(vec[l],r);
}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>T;
    while(T--){
        cin>>n>>m>>L>>V;ans=0;ans2=0;
        int pos=0;
        for(int i=0;i<=L;i++)vec[i]=L+1,c[i]=0;
        for(int i=1;i<=n;i++)cin>>D[i]>>V2[i]>>A[i];
        for(int i=1;i<=m;i++){
            cin>>p[i];
            c[p[i]]++;
        }
        for(int i=1;i<=L;i++)c[i]+=c[i-1];
        for(int i=1;i<=n;i++){
            int d=D[i],v=V2[i],a=A[i];
            if(a==0){
                if(v>V)ck(d,L);
            }
            else if(a<0&&v>V){
                ck(d,min(1ll*L,d+(((2ll*v-1ll*(v-V))*(v-V))-1)/(-a)/2));
            }
            else if(a>0&&v>V)ck(d,L);
            else if(a>0&&v<=V){
                // long long t=(V+1-v+a-1)/a;
                long long tmp=d+((2ll*v+1ll*(V-v))*(V-v))/a/2+1;
                if(tmp<=L)
                ck(tmp,L);
            }
        }
        int mi=L+1;
        for(int i=1;i<=m;i++){
            while(pos<=p[i]){
                mi=min(mi,vec[pos]);
                pos++;
            }
            if(mi!=L+1){
                // cout<<i<<":"<<mi<<' '<<pos<<' '<<p[i]<<endl;
                if(i==m||p[i+1]>mi)ans2++,mi=L+1;
            }
        }
        cout<<ans<<' '<<m-ans2<<endl;
    }
    return 0;
}